我發現前天不是因為吃到壞東西而過敏,而是因為環境灰塵太多 : (
今天要講到的是 API Hook,用到了很多我們在之前學習到的技術。這個技術我覺得算是對之前的技術大集合。
我們在寫程式時或使用任何資源、程序時,都會使用到 windows 提供的 API。
像是當你想要在檔案總管上打開 ThreeSleepCat.png 這張圖時, explorer.exe 就會使用讀取檔案的API,執行這個 API 時引發一系列的調用,最終發出 system call。系統會進入核心模式( kernel mode )來做出處理,此時 OS 會進行檔案輸出等特權指令。當完成後又會回到用戶模式 ( user mode ) 繼續讓你做下一個任務。
示意圖 :

阿不是,是這張 :

我們可以把它簡化成 :

當我們使用 API Hook 的時候,就要劫持請求與回應的這個時機,有點類似於網路滲透技術的中間人攻擊( MITM )。技術上主要是把 hack.dll 或攔截方法注入到目標程序,然後用一些辦法將 hack.dll 的 CreateFile() 取代掉 kernel32 的 CreateFile()。當程序調用 CreateFile() 時,就會使用到我們寫的程序而不是系統本來的程序。

而使用這項操作理論上常常使用一系列的技術來執行 :
IAT ( Impotr Address Table )IAT 的 APIjmp 指令EAT ( Export Address Table )EAT 導出位置改成我們的函數位置,但由於太麻煩而且效果也沒那麼好,所以這方法不常用。這是要在程序的記憶體上設置 Hook 函式的方法,主要分為除錯法與注入法,而注入法又分為代碼注入與 DLL 注入。
Debug API 附加到目標程序上面( 以C++來說就是 “debugapi.h” ),取得所有權限就可以暫停目標程序以進行各種操作,運行時就可以執行我們修改過後的東西。就像使用 x64dbg 時暫停程序來修改指令那樣。Hook 程序執行。
allMain 上設置啟動程序與相應的 Hook 程序,注入時就可以執行 Hooking。以上是 API Hook 的介紹,明天來研究如何進行 API Hook。